/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tpgen.manchester.w3org;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author shanki
 */
public enum Construct {    
    classFrame,//
    classFrameSubClassOf,//
    classFrameEquivalentTo,//
    classFrameDisjointWith,//
    classFrameDisjointUnionOf,//
    objectPropertyFrame,//
    objectPropertyFrameDomain,//
    objectPropertyFrameRange,//
    objectPropertyFrameCharacteristics,//
    objectPropertyFrameSubPropertyOf,//
    objectPropertyFrameEquivalentTo,//
    objectPropertyFrameDisjointWith,//
    objectPropertyFrameInverseOf,//
    objectPropertyFrameSubPropertyChain,//
    objectPropertyCharacteristicsFunctional,//
    objectPropertyCharacteristicsInverseFunctional,//
    objectPropertyCharacteristicsReflexive,//
    objectPropertyCharacteristicsIrreflexive,//
    objectPropertyCharacteristicsSymmetric,//
    objectPropertyCharacteristicsAsymmetric,//
    objectPropertyCharacteristicsTransitive,//
    dataPropertyFrame,//
    dataPropertyFrameDomain,//
    dataPropertyFrameRange,//
    dataPropertyFrameCharacteristics,//
    dataPropertyFrameSubPropertyOf,//
    dataPropertyFrameEquivalentTo,//
    dataPropertyFrameDisjointWith,//
    individualFrame,//
    individualFrameTypes,//
    individualFrameFacts,//
    individualFrameSameAs,//
    individualFrameDifferentFrom,//
//    misc,
    miscEquivalentClasses,
    miscDisjointClasses,
    miscEquivalentProperties,
    miscDisjointProperties,
    miscEquivalentDataProperties,
    miscDisjointDataProperties,
    miscSameIndividual,
    miscDifferentIndividual,
    factNot,//
    factObjectProperty,//
    factDataProperty,//
    descriptionOr,//
    conjunctionAnd,//
    primaryNot,//
    restrictionObjectSome,//
    restrictionObjectOnly,//
    restrictionObjectValue,//
    restrictionObjectSelf,//
    restrictionObjectMin,//
    restrictionObjectMax,//
    restrictionObjectExactly,//
    restrictionDataSome,//
    restrictionDataOnly,//
    restrictionDataValue,//
    restrictionDataMin,//
    restrictionDataMax,//
    restrictionDataExactly,//
    restrictionObjectPrimary,
    restrictionDataPrimary,
    atomicIndividualList,//
    objectPropertyExpressionInverse,//
    dataRangeOr,//
    dataConjunctionAnd,//
    dataPrimaryNot,//
    dataAtomicLiteralList,//
    dataAtomicDataTypeRestriction,//
    listNext,
    twoListNext,
    list2Next,
    subPropertyChainNext;

    private Construct() {
    }
            
    
    public static Set<Construct> complement(Set<Construct> constructs) {
        Set<Construct> compl = new HashSet<Construct>(Arrays.asList(Construct.values()));
        compl.remove(Construct.listNext);
        compl.remove(Construct.twoListNext);
        compl.remove(Construct.list2Next);
        compl.remove(Construct.subPropertyChainNext);
        compl.remove(Construct.restrictionObjectPrimary);
        compl.remove(Construct.restrictionDataPrimary);
        
        compl.removeAll(constructs);
        
        return compl;
    }
}
